
// const SpeedMeasurePlugin = require("speed-measure-webpack-plugin")
// const smp = new SpeedMeasurePlugin()
const CompressionWebpackPlugin = require('compression-webpack-plugin')
const TerserPlugin = require('terser-webpack-plugin')

const productionGzipExtensions = ['js', 'css']
// const BundleAnalyzePlugin = require("webpack-bundle-analyzer").BundleAnalyzerPlugin;
module.exports = {
  // module: {
  //   rules: [
  //     {
  //       test: '/.js$/',
  //       use: [
  //         {
  //           loader: 'thread-loader',
  //           options: {
  //             workers: 3
  //           }
  //         }
  //       ]
  //     }
  //   ]
  // },
  configureWebpack: {
    optimization: {
      minimizer: [
        new TerserPlugin({
          parallel: 4
        })
      ]
    },
    plugins: [

      // new BundleAnalyzePlugin(),
      // // 告诉webpack哪些库不参与打包，同时使用时的名称也得变~
      // new webpack.DllReferencePlugin({
      //   manifest: resolve(__dirname, 'dll/manifest.json')
      // }),
      new CompressionWebpackPlugin({
        algorithm: 'gzip',
        test: new RegExp('\\.(' + productionGzipExtensions.join('|') + ')$'),
        threshold: 10240,
        minRatio: 0.8
      }),
    ]
  },
  chainWebpack: config => {
    // 发布模式
    config.when(process.env.NODE_ENV === 'production', config => {
      config.entry('app').clear().add('./src/main-prod.js')
      config.set('externals', {
        vue: 'Vue',
        'vue-router': 'VueRouter',
        axios: 'axios',
        'element-ui': 'ELEMENT',
        // nprogress: 'NProgress',
        vuex: 'Vuex',
        moment: 'moment'
      })
      config.plugin('html').tap(args => {
        args[0].isProd = true
        return args
      })
    })
    config.when(process.env.NODE_ENV === 'development', config => {
      config.entry('app').clear().add('./src/main-dev.js')
      config.plugin('html').tap(args => {
        args[0].isProd = false
        return args
      })
    })
  },
  devServer: {
    proxy: {
      "/api": {
        // target: "http://10.102.220.32:10000",
        target: "http://10.102.221.61:10000",
        changeOrigin: true,
        pathRewrite: {
          "^/api": "",
        },
      },
      "/socket.io": {
        // target: "http://10.102.220.32:9080",
        target: "http://10.102.221.61:9080",
        ws: true,
        changeOrigin: true,
      },
    },
  },
}
// const path =  require('path');
// const IS_PROD = ['production', 'prod'].includes(process.env.NODE_ENV);
// const resolve = (dir) => path.join(__dirname, dir);
// module.exports = {
//     publicPath: process.env.NODE_ENV === 'production' ? '/site/vue-demo/' : '/',  // 公共路径
//     indexPath: 'index.html' , // 相对于打包路径index.html的路径
//     outputDir: process.env.outputDir || 'dist', // 'dist', 生产环境构建文件的目录
//     assetsDir: 'static', // 相对于outputDir的静态资源(js、css、img、fonts)目录
//     lintOnSave: false, // 是否在开发环境下通过 eslint-loader 在每次保存时 lint 代码
//     runtimeCompiler: true, // 是否使用包含运行时编译器的 Vue 构建版本
//     productionSourceMap: !IS_PROD, // 生产环境的 source map
//     parallel: require("os").cpus().length > 1, // 是否为 Babel 或 TypeScript 使用 thread-loader。该选项在系统的 CPU 有多于一个内核时自动启用，仅作用于生产构建。
//     pwa: {}, // 向 PWA 插件传递选项。
//     chainWebpack: config => {
//         config.resolve.symlinks(true); // 修复热更新失效
//         // 如果使用多页面打包，使用vue inspect --plugins查看html是否在结果数组中
//         config.plugin("html").tap(args => {
//             // 修复 Lazy loading routes Error
//             args[0].chunksSortMode = "none";
//             return args;
//         });
//         config.resolve.alias // 添加别名
//             .set('@', resolve('src'))
//             .set('@assets', resolve('src/assets'))
//             .set('@components', resolve('src/components'))
//             .set('@views', resolve('src/views'))
//             .set('@store', resolve('src/store'));
//     },
//     // css: {
//     //     extract: IS_PROD,
//     //     requireModuleExtension: false,// 去掉文件名中的 .module
//     //     loaderOptions: {
//     //             // 给 less-loader 传递 Less.js 相关选项
//     //             less: {
//     //                 // `globalVars` 定义全局对象，可加入全局变量
//     //                 globalVars: {
//     //                     primary: '#333'
//     //                 }
//     //             }
//     //     }
//     // },
// }
